N + 1 問題
データベース呼び出し
API 呼び出しなど、コストのかかる I/O で同様の問題が発生する可能性もある radish-miyazaki.icon e.g.
以下の例では、全ユーザを取得する SQL が 1 回、各ユーザの投稿を取得する SQL が N 回呼ばれている
code:javascript
const users = await getUsers()
for (const user of users) {
const posts = await getPostsByUserId(user.id)
// ...
}
解決策
JOIN の活用
N 回のクエリを 1 回にまとめる
code:javascript
const users = await getUsers()
const userIds = users.map((user) => user.id)
const posts = await getPostsByUserIds(userIds)